home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / misc / IOBlixDevKitR2.lha / IOBlixDevKit / C / include / ioblix / uart.h < prev   
C/C++ Source or Header  |  1999-02-01  |  9KB  |  222 lines

  1. /*
  2. **      $VER: ioblix/uart.h 37.1 (3.1.99)
  3. **
  4. **      include file for access to IOBlix UARTs
  5. **
  6. **      (C) Copyright 1998,1999 Thore Böckelmann
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #ifndef IOBLIX_UART_H
  11. #define IOBLIX_UART_H 1
  12.  
  13. /* if a UART on a ZorroII and a clock port should NOT be accessed within        */
  14. /* one program then you can #define IOBLIX12 to build two different programs    */
  15. /* from one source without any modifications. Else you have two different       */
  16. /* definitions for both ports                                                   */
  17.  
  18. #ifndef IOBLIX12
  19.     struct UART {
  20.         volatile UBYTE rx;
  21.         volatile UBYTE pad1[15];
  22.         volatile UBYTE ier;
  23.         volatile UBYTE pad2[15];
  24.         volatile UBYTE iir;
  25.         volatile UBYTE pad3[15];
  26.         volatile UBYTE lcr;
  27.         volatile UBYTE pad4[15];
  28.         volatile UBYTE mcr;
  29.         volatile UBYTE pad5[15];
  30.         volatile UBYTE lsr;
  31.         volatile UBYTE pad6[15];
  32.         volatile UBYTE msr;
  33.         volatile UBYTE pad7[15];
  34.         volatile UBYTE scr;
  35.         volatile UBYTE pad8[15];
  36.     };
  37.  
  38.     struct UART12 {
  39.         volatile UBYTE pad0;
  40.         volatile UBYTE rx;
  41.         volatile UBYTE pad1[3];
  42.         volatile UBYTE ier;
  43.         volatile UBYTE pad2[3];
  44.         volatile UBYTE iir;
  45.         volatile UBYTE pad3[3];
  46.         volatile UBYTE lcr;
  47.         volatile UBYTE pad4[3];
  48.         volatile UBYTE mcr;
  49.         volatile UBYTE pad5[3];
  50.         volatile UBYTE lsr;
  51.         volatile UBYTE pad6[3];
  52.         volatile UBYTE msr;
  53.         volatile UBYTE pad7[3];
  54.         volatile UBYTE scr;
  55.         volatile UBYTE pad8[3];
  56.     };
  57. #else
  58.     struct UART {
  59.         volatile UBYTE pad0;
  60.         volatile UBYTE rx;
  61.         volatile UBYTE pad1[3];
  62.         volatile UBYTE ier;
  63.         volatile UBYTE pad2[3];
  64.         volatile UBYTE iir;
  65.         volatile UBYTE pad3[3];
  66.         volatile UBYTE lcr;
  67.         volatile UBYTE pad4[3];
  68.         volatile UBYTE mcr;
  69.         volatile UBYTE pad5[3];
  70.         volatile UBYTE lsr;
  71.         volatile UBYTE pad6[3];
  72.         volatile UBYTE msr;
  73.         volatile UBYTE pad7[3];
  74.         volatile UBYTE scr;
  75.         volatile UBYTE pad8[3];
  76.     };
  77. #endif
  78.  
  79. #define tx      rx
  80. #define dll     rx
  81. #define dlm     ier
  82. #define fcr     iir
  83. #define efr     iir
  84. #define xon1    mcr
  85. #define xon2    lsr
  86. #define xoff1   msr
  87. #define xoff2   scr
  88.  
  89. /*
  90.  * These are the definitions for the FIFO Control Register
  91.  * (16650 only)
  92.  */
  93. #define UART_FCR_ENABLE_FIFO    0x01 /* Enable the FIFO */
  94. #define UART_FCR_CLEAR_RCVR     0x02 /* Clear the RCVR FIFO */
  95. #define UART_FCR_CLEAR_XMIT     0x04 /* Clear the XMIT FIFO */
  96. #define UART_FCR_DMA_SELECT     0x08 /* For DMA applications */
  97. #define UART_FCR_TRIGGER_MASK   0xC0 /* Mask for the FIFO trigger range */
  98. #define UART_FCR_TRIGGER_1      0x00 /* Mask for trigger set at 1 */
  99. #define UART_FCR_TRIGGER_4      0x40 /* Mask for trigger set at 4 */
  100. #define UART_FCR_TRIGGER_8      0x80 /* Mask for trigger set at 8 */
  101. #define UART_FCR_TRIGGER_14     0xC0 /* Mask for trigger set at 14 */
  102. /* 16650A redefinitions */
  103. #define UART_FCR0_R_TRIGGER_8   0x00 /* Mask for receive trigger set at 8 */
  104. #define UART_FCR0_R_TRIGGER_16  0x40 /* Mask for receive trigger set at 16 */
  105. #define UART_FCR0_R_TRIGGER_24  0x80 /* Mask for receive trigger set at 24 */
  106. #define UART_FCR0_R_TRIGGER_28  0xC0 /* Mask for receive trigger set at 28 */
  107. #define UART_FCR0_T_TRIGGER_8   0x10 /* Mask for transmit trigger set at 8 */
  108. #define UART_FCR0_T_TRIGGER_16  0x00 /* Mask for transmit trigger set at 16 */
  109. #define UART_FCR0_T_TRIGGER_24  0x20 /* Mask for transmit trigger set at 24 */
  110. #define UART_FCR0_T_TRIGGER_30  0x30 /* Mask for transmit trigger set at 30 */
  111. /* 16654 redefinitions */
  112. #define UART_FCR4_R_TRIGGER_8   0x00 /* Mask for receive trigger set at 8 */
  113. #define UART_FCR4_R_TRIGGER_16  0x40 /* Mask for receive trigger set at 16 */
  114. #define UART_FCR4_R_TRIGGER_56  0x80 /* Mask for receive trigger set at 56 */
  115. #define UART_FCR4_R_TRIGGER_60  0xC0 /* Mask for receive trigger set at 60 */
  116. #define UART_FCR4_T_TRIGGER_8   0x00 /* Mask for transmit trigger set at 8 */
  117. #define UART_FCR4_T_TRIGGER_16  0x10 /* Mask for transmit trigger set at 16 */
  118. #define UART_FCR4_T_TRIGGER_32  0x20 /* Mask for transmit trigger set at 32 */
  119. #define UART_FCR4_T_TRIGGER_56  0x30 /* Mask for transmit trigger set at 56 */
  120. /* TI 16750 definitions */
  121. #define UART_FCR7_64BYTE        0x20 /* Go into 64 byte mode */
  122.  
  123. /*
  124.  * These are the definitions for the Line Control Register
  125.  *
  126.  * Note: if the word length is 5 bits (UART_LCR_WLEN5), then setting
  127.  * UART_LCR_STOP will select 1.5 stop bits, not 2 stop bits.
  128.  */
  129. #define UART_LCR_DLAB   0x80    /* Divisor latch access bit */
  130. #define UART_LCR_SBC    0x40    /* Set break control */
  131. #define UART_LCR_SPAR   0x20    /* Mark/Space parity select */
  132. #define UART_LCR_EPAR   0x10    /* Odd/Even parity select */
  133. #define UART_LCR_PARITY 0x08    /* Parity Enable */
  134. #define UART_LCR_STOP   0x04    /* Stop bits: 0=1 stop bit, 1= 2 stop bits */
  135. #define UART_LCR_WLEN5  0x00    /* Wordlength: 5 bits */
  136. #define UART_LCR_WLEN6  0x01    /* Wordlength: 6 bits */
  137. #define UART_LCR_WLEN7  0x02    /* Wordlength: 7 bits */
  138. #define UART_LCR_WLEN8  0x03    /* Wordlength: 8 bits */
  139.  
  140. /*
  141.  * These are the definitions for the Line Status Register
  142.  */
  143. #define UART_LSR_ERROR  0x80    /* Any error happend */
  144. #define UART_LSR_TEMT   0x40    /* Transmitter empty */
  145. #define UART_LSR_THRE   0x20    /* Transmit-hold-register empty */
  146. #define UART_LSR_BI     0x10    /* Break interrupt indicator */
  147. #define UART_LSR_FE     0x08    /* Frame error indicator */
  148. #define UART_LSR_PE     0x04    /* Parity error indicator */
  149. #define UART_LSR_OE     0x02    /* Overrun error indicator */
  150. #define UART_LSR_DR     0x01    /* Receiver data ready */
  151.  
  152. /*
  153.  * These are the definitions for the Interrupt Identification Register
  154.  */
  155. #define UART_IIR_NO_INT 0x01    /* No interrupts pending */
  156. #define UART_IIR_ID     0x06    /* Mask for the interrupt ID */
  157.  
  158. #define UART_IIR_MSI    0x00    /* Modem status interrupt */
  159. #define UART_IIR_THRI   0x02    /* Transmitter holding register empty */
  160. #define UART_IIR_RDI    0x04    /* Receiver data interrupt */
  161. #define UART_IIR_RLSI   0x06    /* Receiver line status interrupt */
  162. #define UART_IIR_XOFF   0x10    /* Xoff interrupt */
  163.  
  164. /*
  165.  * These are the definitions for the Interrupt Enable Register
  166.  */
  167. #define UART_IER_CTS    0x80    /* Enable Modem CTS interrupt */
  168. #define UART_IER_RTS    0x40    /* Enable Modem RTS interrupt */
  169. #define UART_IER_XOFF   0x20    /* Enable Modem Xoff interrupt */
  170. #define UART_IER_MSI    0x08    /* Enable Modem status interrupt */
  171. #define UART_IER_RLSI   0x04    /* Enable receiver line status interrupt */
  172. #define UART_IER_THRI   0x02    /* Enable Transmitter holding register int. */
  173. #define UART_IER_RDI    0x01    /* Enable receiver data interrupt */
  174. /*
  175.  * Sleep mode for ST16650 and TI16750.
  176.  * Note that for 16650, EFR-bit 4 must be selected as well.
  177.  */
  178. #define UART_IERX_SLEEP  0x10   /* Enable sleep mode */
  179.  
  180. /*
  181.  * These are the definitions for the Modem Control Register
  182.  */
  183. #define UART_MCR_CLOCK4 0x80    /* Clock division by 4 */
  184. #define UART_MCR_IRDA   0x40    /* IR enable */
  185. #define UART_MCR_IRQ    0x20    /* IRQ select, 16c650 only */
  186. #define UART_MCR_LOOP   0x10    /* Enable loopback test mode */
  187. #define UART_MCR_OUT2   0x08    /* Out2 complement */
  188. #define UART_MCR_OUT1   0x04    /* Out1 complement */
  189. #define UART_MCR_RTS    0x02    /* RTS complement */
  190. #define UART_MCR_DTR    0x01    /* DTR complement */
  191.  
  192. /*
  193.  * These are the definitions for the Modem Status Register
  194.  */
  195. #define UART_MSR_DCD    0x80    /* Data Carrier Detect */
  196. #define UART_MSR_RI     0x40    /* Ring Indicator */
  197. #define UART_MSR_DSR    0x20    /* Data Set Ready */
  198. #define UART_MSR_CTS    0x10    /* Clear to Send */
  199. #define UART_MSR_DDCD   0x08    /* Delta DCD */
  200. #define UART_MSR_TERI   0x04    /* Trailing edge ring indicator */
  201. #define UART_MSR_DDSR   0x02    /* Delta DSR */
  202. #define UART_MSR_DCTS   0x01    /* Delta CTS */
  203. #define UART_MSR_ANY_DELTA 0x0F /* Any of the delta bits! */
  204.  
  205. /*
  206.  * These are the definitions for the Extended Features Register
  207.  * (StarTech 16C660 only, when DLAB=1)
  208.  */
  209. #define UART_EFR_CTS    0x80    /* CTS flow control */
  210. #define UART_EFR_RTS    0x40    /* RTS flow control */
  211. #define UART_EFR_SCD    0x20    /* Special character detect */
  212. #define UART_EFR_ECB    0x10    /* Enhanced control bit */
  213. /*
  214.  * the low four bits control software flow control
  215.  */
  216.  
  217. /* This value must be used to calculate the correct values for the divisor latch */
  218. #define BAUD_BASE       (24000000/16)
  219.  
  220. #endif /* IOBLIX_UART_H */
  221.  
  222.